// 合并后的字符颜色映射表，包含字母、汉字拼音首字母和对应颜色
const charColorMap = [
  { letter: 'a', regex: /[\u3400-\u346B\u8000-\u8159]/, color: '#3370ff' },
  { letter: 'b', regex: /[\u346C-\u352F\u815A-\u8396]/, color: '#4954e6' },
  { letter: 'c', regex: /[\u3530-\u3AA0\u8397-\u8787]/, color: '#f54a45' },
  { letter: 'd', regex: /[\u3AA1-\u3BFF\u8788-\u8BFF]/, color: '#00b69d' },
  { letter: 'e', regex: /[\u3C00-\u3C6E\u8C00-\u8C6B]/, color: '#2ca91f' },
  { letter: 'f', regex: /[\u3C6F-\u3CEF\u8C6C-\u8EBD]/, color: '#98b600' },
  { letter: 'g', regex: /[\u3CF0-\u3DFF\u8EBE-\u9156]/, color: '#f80f80' },
  { letter: 'h', regex: /[\u3E00-\u406F\u9157-\u963F]/, color: '#d136d1' },
  { letter: 'j', regex: /[\u4070-\u4243\u9640-\u9BBF]/, color: '#7f3bf5' },
  { letter: 'k', regex: /[\u4244-\u43FF\u9BC0-\u9FBC]/, color: '#8f959e' },
  { letter: 'l', regex: /[\u4400-\u472F\u9FBD-\uA31F]/, color: '#3370ff' },
  { letter: 'm', regex: /[\u4730-\u485E\uA320-\uA60C]/, color: '#4954e6' },
  { letter: 'n', regex: /[\u485F-\u4E4F\uA60D-\uA8C8]/, color: '#f54a45' },
  { letter: 'o', regex: /[\u4E50-\u4E9F\uA8C9-\uA8E9]/, color: '#00b69d' },
  { letter: 'p', regex: /[\u4EA0-\u517F\uA8EA-\uAD79]/, color: '#2ca91f' },
  { letter: 'q', regex: /[\u5180-\u554F\uAD7A-\uB0DD]/, color: '#98b600' },
  { letter: 'r', regex: /[\u5550-\u56FF\uB0DE-\uB31B]/, color: '#f80f80' },
  { letter: 's', regex: /[\u5700-\u5DFF\uB31C-\uB829]/, color: '#d136d1' },
  { letter: 't', regex: /[\u5E00-\u62FF\uB82A-\uBBF3]/, color: '#f01d94' },
  { letter: 'w', regex: /[\u6300-\u66FF\uBBF4-\uC077]/, color: '#3370ff' },
  { letter: 'x', regex: /[\u6700-\u6DFF\uC078-\uC53F]/, color: '#4954e6' },
  { letter: 'y', regex: /[\u6E00-\u77FF\uC540-\uCB77]/, color: '#f54a45' },
  { letter: 'z', regex: /[\u7800-\u7FFF\uCB78-\uD7FF]/, color: '#00b69d' },
  { letter: 'i', regex: null, color: '#f01d94' },
  { letter: 'u', regex: null, color: '#7f3bf5' },
  { letter: 'v', regex: null, color: '#8f959e' },
];

/**
 * 获取汉字的拼音首字母
 * @param char - 单个汉字字符
 * @returns 首字母（小写），如果不是汉字则返回空字符串
 */
function getChineseFirstLetter(char: string) {
  // 检查是否为汉字
  if (!/[\u3400-\uD7FF]/.test(char)) {
    return '';
  }

  // 使用正则表达式查找对应的首字母
  for (const item of charColorMap) {
    if (item.regex && item.regex.test(char)) {
      return item.letter;
    }
  }

  // 如果没有找到匹配的范围，默认返回'a'
  return 'a';
}

/**
 * 根据字符获取对应的颜色值
 * @param char - 输入字符（汉字、字母、数字或其他字符）
 * @returns 对应的颜色值
 */
function getColorByChar(char: any) {
  // 确保输入是单个字符
  if (typeof char !== 'string' || char.length !== 1) {
    throw new Error('输入必须是单个字符');
  }

  // 处理字母（不区分大小写）
  const lowerChar = char.toLowerCase();
  if (/[a-zA-Z]/.test(char)) {
    const letterItem = charColorMap.find((item) => item.letter === lowerChar);
    return letterItem ? letterItem.color : '#3370ff';
  }

  // 处理汉字
  const firstLetter = getChineseFirstLetter(char);
  if (firstLetter) {
    const letterItem = charColorMap.find((item) => item.letter === firstLetter);
    return letterItem ? letterItem.color : '#3370ff';
  }

  // 数字和特殊字符默认返回#3370ff
  return '#3370ff';
}

export default getColorByChar;
